package com.leetcode;

public class Date250411 {
    /**
     * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
     * @param字符串s
     * @return
     */
    public static int lengthOfLongestSubstring(String ss) {
//        int len = 0;
//        for(int left = 0, right = 1; left < right && right < s.length(); ) {
//            if(s.charAt(left)==s.charAt(right)) {
//                len = Math.max(right - left, len);
//                left++;
//                right++;
//            }else {
//                right++;
//                if(right<s.length()&&s.charAt(right)!=s.charAt(right-1)){
//                    right++;
//                }else{
//                    len = Math.max(right - left-1, len);
//                    left = right;
//                    right++;
//                }
//            }
//        }
//        return len==0?1:len;

        //滑动窗口
        char[] s = ss.toCharArray();
        int left = 0, right = 0, ret = 0;
        int[] hash = new int[128];//数组模拟哈希表
        while(right < ss.length()){
            hash[s[right]]++;//进入窗口
            while(hash[s[right]]>1){//判断是否遇到重复的字符
                hash[s[left++]]--;//出窗口
            }
            ret = Math.max(ret, right - left + 1);//更新
            right++;
        }
        return ret;
    }
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abcabcbb"));
    }
}


